/*

Summary:
All button classes' base class.

Remark:
None.

Version:
0.1.0

LastUpdatedDate:
2012-09-28

*/


#pragma once

#include "ControlWindow.h"
#include "..\Tool\Event.h"



namespace Zaf {
namespace Mwl {
namespace __Internal {
	class WndProcPicker;
}



struct ClickedEventArgs : public EventArgs {

};



class ButtonWindow : public ControlWindow {

public:
	virtual ~ButtonWindow();

	Event<ClickedEventArgs&> ClickedEvent;

protected:
	ButtonWindow();
	ButtonWindow(WORD id);

	LRESULT DefWndProc(const WndMsg& msg);

	DWORD GetButtonType() const;
	void SetButtonType(DWORD type);

private:
	void CommonConstructor();

	HWND CreateConcreteWindow();
	LRESULT OnCommand(const WndMsg& msg);

	static const wchar_t* const ClassName;
	static __Internal::WndProcPicker ButtonWndProc;
};


}
}

